package com.icekrvams.billing

import androidx.annotation.Size
import androidx.annotation.UiThread
import com.android.billingclient.api.BillingFlowParams

interface BillingFlowDraftCallback {
    /**
     * 未查询到对应商品信息时，Billing Sdk 会进行一次商品信息的重新查询。
     * @param isRefreshing true for 查询开始, false for 查询结束。
     */
    @UiThread
    fun onRefreshProductDetailsStateChanged(isRefreshing: Boolean) {}

    /**
     * 未查询到 Id 为 [product] 的商品，无法发起购买。
     */
    fun onProductNotFound(product: String) {}

    /**
     * 已拥有该商品，不能重复购买。
     */
    fun onProductAlreadyOwned(product: String) {}

    /**
     * 当遇到以下几种情况时，建议引导用户跳转到 PlayStore 的订阅管理页面。
     * 1.用户已经拥有了目标订阅商品。
     * 2.用户已经存在至少两个订阅商品。
     * 3.未获取到当前订阅商品的 offerToken。
     * @param ownedSubs 用户已经拥有的订阅商品。
     */
    fun onShouldGoToSubManagePage(@Size(min = 1) ownedSubs: List<String>) {}

    /**
     * 检查通过，可对目标商品进行购买。
     * 1.首次购买一次性内购商品。
     * 2.首次购买订阅商品。
     * 3.已拥有一个订阅商品，但不是目标商品：升级或者降级。
     * 4.重复购买消耗性内购商品。
     */
    fun onReadyToBuy(billingFlowParams: BillingFlowParams)
}
